<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>79_函数的方法.html</title>
    <script type="text/javascript">

        /**
         * call()和apply()
         *  - 这两个方法都是函数对象的方法，需要通过函数象来调用
         *  - 当对函数调用call()和apply()都会调用函数执行
         *  - 在调用call()和apply()时，可以将一个对象指定为第一个参数
         *      此时这个对象将会成为函数执行时的this
         *  - call方法可以将实参在对象后依次传递
         *  - apply()需要将实参封装在一个数组中统一传递
         * 
         *  - this的情况：
         *      1.以函数形式调用，this指的是windows
         *      2.以方法形式调用时，this是调用方法的对象
         *      3.以构造函数的形式调用时，this是新创建的那个对象
         *      4.使用call和apply调用时，this是指定的那个对象
         * 
        */

        var obj = {name:'obj'};
        var obj2 = {name:'obj2'};

        function fun(a,b){
            console.log("a = " + a);
            console.log("b = " + b);
            alert(this.name);
        }

        // fun();

        // fun.call(obj);
        // fun.apply(obj2);
        fun.call(obj,2,3);
        fun.apply(obj,[2,3]);



    </script>
</head>
<body>
    
</body>
</html>